#ifndef FILESENDER_H
#define FILESENDER_H

#include <QObject>
#include <QTcpSocket>
#include <QFile>
#include <global_client.h>

/**
 * @brief The FileSender class
 * 文件发送任务
 */
class FileSender : public QObject
{
    Q_OBJECT
public:
    FileSender(QObject *parent = nullptr);
    ~FileSender();

    /**
     * @brief connectToServer
     * @param host  主机ip
     * @param port  主机端口
     * @return 进行连接
     */
    bool connectToServer(const QString &host, quint16 port);

    /**
     * @brief sendFile
     * @param fileInformation 将要发送的文件的信息，包括file_name保存接收端的文件名称
     * @param filePath  将要发送的文件的路径
     */
    void sendFile(FileInformation fileInformation,const QString &filePath);

private slots:
    void onConnected();
    void onReadyRead();
    void onDisconnected();
    void onError(QAbstractSocket::SocketError socketError);

private:
    QTcpSocket *tcpSocket;
    QFile *file;

signals:
    /**
     * @brief FileReceivedOk
     * 文件成功传输时发送信号
     */
    void FileReceivedOk();

    /**
     * @brief FileReceivedError
     * 文件传输失败时发送信号
     */
    void FileReceivedError();

    /**
     * @brief UnknownReply
     * 接收端返回未知回复时发送信号
     */
    void UnknownReply();

    /**
     * @brief onSendingFile
     * @param now   当前传输文件大小
     * @param total 文件总大小
     * 文件传输时发送信号
     */
    // TODO有bug
    void onSendingFile(quint32 now,quint32 total);
};

#endif // FILESENDER_H
